home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / PROGEDIT / 3943.ZIP / EVOLV201.ZIP / EVOLVE.DOC < prev    next >
Text File  |  1993-07-21  |  75KB  |  1,897 lines

  1.                                  EVOLVE!
  2.  
  3.  
  4. Copyright (C)  Richard H. Smith, 1993  All Rights Reserved. 
  5.  
  6.  
  7. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1
  8.  
  9. Why programmers need to use EVOLVE!. . . . . . . . . . . . . . . . . . .   3
  10.      
  11. What is source code maintenance? . . . . . . . . . . . . . . . . . . . .   3
  12.      What do programmers need to maintain source code? . . . . . . . . .   4
  13.      How EVOLVE! empowers programmers to maintain source
  14.           code . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   5
  15.           What is EVOLVE!'s relation to source code
  16.                maintenance?. . . . . . . . . . . . . . . . . . . . . . .   5
  17.           How the report function transforms an outline into
  18.                source code . . . . . . . . . . . . . . . . . . . . . . .   5
  19.                "<^>" . . . . . . . . . . . . . . . . . . . . . . . . . .   6
  20.                ":>". . . . . . . . . . . . . . . . . . . . . . . . . . .   6
  21.           How to explicitly define a structure . . . . . . . . . . . . .   6
  22.                Using ":>" and "<^>" together . . . . . . . . . . . . . .   8
  23.  
  24. How to use EVOLVE! . . . . . . . . . . . . . . . . . . . . . . . . . . .  10
  25.      The user interface. . . . . . . . . . . . . . . . . . . . . . . . .  10
  26.           The menu bar and menus . . . . . . . . . . . . . . . . . . . .  10
  27.           Shortcuts. . . . . . . . . . . . . . . . . . . . . . . . . . .  11
  28.           Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . .  11
  29.           The status line. . . . . . . . . . . . . . . . . . . . . . . .  11
  30.           Dialog boxes . . . . . . . . . . . . . . . . . . . . . . . . .  11
  31.      How to transform a source code file into an outline that
  32.           explicitly defines the structure of the program. . . . . . . .  12
  33.      EVOLVE!'s Script Programming Language . . . . . . . . . . . . . . .  14
  34.  
  35. Command Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . .  20
  36.      Menu structure. . . . . . . . . . . . . . . . . . . . . . . . . . .  20
  37.      Description of commands . . . . . . . . . . . . . . . . . . . . . .  22
  38.           Menu items sorted by hotkey. . . . . . . . . . . . . . . . . .  33
  39.  
  40. License Agreement. . . . . . . . . . . . . . . . . . . . . . . . . . . .  35
  41.      Definition of Shareware . . . . . . . . . . . . . . . . . . . . . .  35
  42.      Disclaimer - Agreement. . . . . . . . . . . . . . . . . . . . . . .  35
  43.      Benefits of registering . . . . . . . . . . . . . . . . . . . . . .  36
  44.      How To Register . . . . . . . . . . . . . . . . . . . . . . . . . .  37
  45.  
  46. ASP Ombudsman Statement. . . . . . . . . . . . . . . . . . . . . . . . .  39
  47.  
  48. About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . .  40
  49.  
  50.  
  51. Introduction
  52.  
  53. Mathematicians, and other technical people, sometimes talk about an
  54. abstract but simple concept they call a 'graph.'  This kind of graph
  55. is independent of any particular visual representation.  We can
  56. represent one graph an infinite number of ways.  A graph is simply
  57. a set of nodes and edges.  Each edge is a directed association of
  58. two nodes: an edge connects from one node to another node. 
  59. Sometimes these graphs are called 'nets' or 'networks.'
  60.  
  61. We can represent any information as a graph.  In particular, a
  62. computer program's source code specifies a graph, and the compiler
  63. constructs that graph while parsing the source code.  Graphs are
  64. fundamental to the way computers process information.  Any
  65. information that has a structure is an example of a graph.  
  66.  
  67. EVOLVE! is a graph tool.  It can edit graphs, generate an ASCII file
  68. that specifies the graph, and execute its own graph programming
  69. language.  The report function of EVOLVE! can generate a graph
  70. specification in a wide range of grammars.  Remember, every program
  71. is a graph specification.  I use EVOLVE! to represent parts of
  72. itself as a graph, and generate its own source code in Borland
  73. Pascal.  EVOLVE! facilitates developing and maintaining source code
  74. in any language.  It will enable a programmer to design a program
  75. such that he can efficiently implement changes, much like a
  76. programmer can use constants and macros to improve the
  77. maintainability of source code.  However, EVOLVE! presents the
  78. program in a more visual (rather than verbal) way that most people
  79. find more readable.  EVOLVE! also enables users to dynamically
  80. inspect and modify a program's structure.  The rest of this chapter
  81. will explain how EVOLVE! displays graphs.
  82.  
  83. I need to use some trivial and meaningless example of a graph to
  84. clearly explain how to best display them on a computer screen.  The
  85. example graph is 5 nodes {A,B,C,D,E} and 7 edges
  86. {AB,AC,AD,BE,CE,DE,EA}.  The previous sentence represented the graph
  87. one way by just listing the nodes and edges.  In figure 1 is another
  88. representation of the graph, where each node is represented by its
  89. name (e.g. a letter) and each edge is represented by a line.
  90.  
  91.                          ┌── >B ───┐    
  92.                          │         v  
  93.                     ┌── >A ─ >C ─ >E ─┐    
  94.                     │    │         ^  │     
  95.                     │    └── >D ───┘  │
  96.                     │                 │
  97.                     └─────────────────┘
  98.                                      
  99.                   Figure 1  An example graph
  100.  
  101. You will usually see graphs represented by a drawing where each node
  102. is represented by an ellipse or polygon containing a node identifier
  103. and each edge is represented with a line.  This is an effective
  104. format for representing a graph on paper.  We can display even large
  105. graphs this way because large pieces of paper are inexpensive and
  106. easy to acquire.
  107.  
  108. Imagine what would happen if we needed to show more text inside of
  109. each node.  Or what if we had hundreds of nodes instead of five?  We
  110. would need a lot of area to show a representation of this kind that
  111. was readable.  This works well on paper, because you can get big
  112. pieces of paper.  It does not work as well on a computer display,
  113. because they are usually only about a half page big.
  114.  
  115. Some would argue that by using a scrollable window, a computer can
  116. display a large graph one small rectangle at a time.  Personally, I
  117. find it difficult to take in a large graph when I can only see a
  118. small part of it at once.  To clearly display large graphs on a
  119. computer screen, we need a representation that frugally uses space. 
  120. The representation shown in the figure above has a lot of unused
  121. spaced that is aesthetically pleasing but communicates little
  122. information.
  123.  
  124. The representation I prefer to use is that of a text outline.  Below
  125. is our example graph represented as a text outline
  126.  
  127.      A
  128.      1. B
  129.        1. E
  130.          1. A
  131.      2. C
  132.        1. E
  133.      3. D
  134.        1. E
  135.  
  136. With this format,  the node 'A' is listed as a child of 'E' only
  137. once because listing it under every appearance of 'E' would be
  138. redundant.  Note that we have a lot of room to the right of each
  139. node to display a full line of text.  The text outline format above
  140. has one problem: how can we know that the 'E's and 'A's are the same
  141. node, or distinct nodes with identical names?  One solution some
  142. graph representations use is to insist that each node have a unique
  143. name.  EVOLVE! does not implement this solution.  Instead, EVOLVE!
  144. displays a unique identifying number for each node that appears more
  145. than once.  Below is how EVOLVE! could display this example graph.
  146.  
  147.      A {123456789:3}
  148.      1. B
  149.        1. E {123456780:1}
  150.          1. A {123456789:3}
  151.      2. C
  152.        1. E {123456780:1}
  153.      3. D
  154.        1. E {123456780:1}
  155.  
  156. The curly brackets contain two numbers separated by a colon.  The
  157. first number is a unique identifier.  The second number is the
  158. number of edges that originate from that node.  The edge from 'E' to
  159. 'A' is only represented once, but every image of 'E' indicates that
  160. there is one edge originating from it with the ':1}'.
  161.  
  162. EVOLVE! is a graph tool that represents graphs as text outlines. 
  163. EVOLVE! is also a source code maintenance tool because source code
  164. is a graph representation, and EVOLVE! has capabilities for
  165. transforming graphs between the source code representation and the
  166. text outline representation.
  167.  
  168. Chapter 2 explains why programmers need to use EVOLVE!.  Chapter 3
  169. explains how to use EVOLVE!.  Chapter 4 is a reference section for
  170. EVOLVE!.
  171.  
  172.  
  173. Why programmers need to use EVOLVE!
  174.  
  175. Programmers need to use EVOLVE! for two reasons.  First, proper use
  176. of EVOLVE! will minimize the keystrokes and decisions required to
  177. make source code changes.  Second, programmers can use EVOLVE! to
  178. clarify their understanding of the consequences of source code
  179. changes.
  180.  
  181. This chapter provides the information a user needs to understand
  182. what EVOLVE! is and what requirements it fulfills.  This chapter's
  183. first section is a definition of source code maintenance.  The
  184. second section describes the capabilities a programmer needs to
  185. maintain source code.  The third section describes the tools, other
  186. than EVOLVE!, available for facilitating source code maintenance. 
  187. The fourth section explains the source code maintenance capabilities
  188. that only EVOLVE! provides.
  189.  
  190. What is source code maintenance?
  191.  
  192. Source code maintenance is closely related to, but not equivalent
  193. to, software maintenance.  Richard E. Fairley defines in his book
  194. "Software Engineering" software maintenance as "the software
  195. engineering activities that occur following delivery of a software
  196. product to a customer."  This could include making changes to the
  197. software that do not involve changing the source code.  You could
  198. produce a new version of an executable program by simply using a
  199. different compiler.  Also, some instances of source code maintenance
  200. are not software maintenance.  For example, a programmer may change
  201. a comment that was in error.  If the comment does not affect any
  202. deliverables to the client, this modification is source code
  203. maintenance but not software maintenance.  However, to the
  204. programmer who writes source code, software maintenance usually
  205. means changing the source code.  
  206.  
  207. The problem with the term "source code maintenance" is that it is
  208. not maintenance in the traditional sense.  Traditionally,
  209. maintenance means restoring something that is worn out.  Software
  210. does not wear out.  The American Heritage Dictionary defines
  211. maintenance as "The action of continuing, carrying on, preserving,
  212. or retaining something."  This does not describe what I think of as
  213. source code maintenance, unless the thing that source code
  214. maintenance continues, preserves, and maintains is the customer's
  215. satisfaction.  Whether the software has been delivered to the
  216. customer makes no difference to the technical challenge of changing
  217. the source in an appropriate manner.  Therefore,  I define source
  218. code maintenance as the process of evolving software by implementing
  219. appropriate incremental changes.  This process of evolving source
  220. code may occur during the development phase.
  221.  
  222. Since we know that software does not wear out, we should consider
  223. why programmers need to change source code.  There are three  types
  224. of reasons programmers change source code.  First, programmers need
  225. to correct problems.  Second, the requirements for the program may
  226. change.  Third, the development strategy may be based on
  227. incrementally evolving the program.  The point here is that
  228. programmers make incremental changes to source code in software
  229. development as well as software maintenance.
  230.  
  231. What do programmers need to maintain source code?
  232.  
  233. Programmers need the following abilities to facilitate the safe and
  234. correct maintenance of source code.
  235.  
  236.      1. The capability to modify the source code with a minimum of
  237.      keystrokes and decisions.  This reduces the probability a
  238.      programmer will introduce new errors when he makes a
  239.      modification.  For example, programmers use named constants so
  240.      that they can redefine the constant and re-compile and the
  241.      compiler will implement the new value everywhere that constant
  242.      is used.
  243.  
  244.      2. The capability to encapsulate areas of the source code to
  245.      avoid unintended side effects.
  246.  
  247.      3. The ability to inspect the code and data structures to see
  248.      the consequences of changes they are considering.
  249.  
  250.  
  251. How EVOLVE! empowers programmers to maintain source code
  252.  
  253. EVOLVE! lets users program down to the lowest level of detail with
  254. a structure editor.  It enables users to change and dynamically
  255. inspect a program's structure.  When a programmer uses EVOLVE! to
  256. explicitly define the programs structure, she has at her disposal
  257. hypertext like links she can use to inspect the source code.
  258.  
  259. This section answers the following questions:
  260.  
  261.      1. What is EVOLVE!'s relation to source code maintenance?
  262.  
  263.      2. How does the report function transform an outline into
  264.      source code?
  265.  
  266.      3. How can a programmer use EVOLVE! to explicitly represent the
  267.      structure of a program as an outline?
  268.  
  269. What is EVOLVE!'s relation to source code maintenance?
  270.  
  271. EVOLVE! is in one way the complement of source code.  Source code is
  272. always a sequence of symbols that define a structure.  The structure
  273. defined by source code includes data structures, machine
  274. instructions, compiler directives, and comments to the reader of the
  275. source code.  EVOLVE! is a structure editor that produces source
  276. code.  It enables you to edit the structure as a hierarchy (a.k.a.
  277. outline), and produce source code from that hierarchy.  Although
  278. EVOLVE! displays the program as an outline while a user edits it, he
  279. can press a key to instantly view the program as source code.
  280.  
  281. When programmers use a text editor to create and modify a source
  282. code file, they use the syntax of the language and the
  283. identifiers they create to specify a structure that the compiler
  284. will understand and process into machine language.  When a
  285. programmer uses EVOLVE!, he explicitly defines a structure 
  286. (visually represented on the screen as an outline) that the EVOLVE!
  287. program processes to produce a text file of source code that
  288. specifies the explicitly defined structure.  If the programmer
  289. creates a structure with EVOLVE!, he can use this structure to
  290. perform the following source code maintenance functions:
  291.  
  292.      1. Efficiently implement changes without introducing new
  293.      errors. 
  294.  
  295.      2. Dynamically inspect the structure of the code to evaluate
  296.      the consequences of possible modifications.
  297.  
  298. How the report function transforms an outline into source code
  299.  
  300. The report command under the files menu will generate source code
  301. from an outline by processing two special strings.  The first string
  302. is "<^>" and the second string is ":>".  Programmers use the ":>"
  303. string to define the syntactic structure and the "<^>" string to
  304. define part of the semantic structure.  
  305.  
  306. "<^>"
  307.  
  308. When a user chooses to produce a report, EVOLVE! processes the "<^>"
  309. string first by replacing each one with the text from a subsidiary
  310. line in the outline.  Below is an example of how the report function
  311. processes "<^>":
  312.  
  313.      The <^> is <^>.
  314.        car
  315.        green
  316.        The end.
  317.  
  318. The outline above would produce the following report:
  319.  
  320.      The car is green.
  321.        The end.
  322.  
  323. Notice that EVOLVE! accounts for how many subsidiary lines were used
  324. to replace "<^>", and processes the rest.
  325.  
  326. ":>"
  327.  
  328. The ":>" string is used to define delimiters.  Many programming
  329. languages will use a comma or semicolon in between items in a list,
  330. and a special string to mark the end like '}', ')', or 'end'.  You
  331. can use ":>" twice in one line: first to specify the in between
  332. delimiter and second occurrence of ":>" to define the ending
  333. delimiter.  Below is an example:
  334.  
  335.      MyFunc(:>,:>)
  336.        aaa
  337.        bbb
  338.        ccc
  339.  
  340. The outline above would produce the following report:
  341.  
  342.      MyFunc(
  343.        aaa,
  344.        bbb,
  345.        ccc)
  346.  
  347. How to explicitly define a structure
  348.  
  349. Users will want to create an outline where an identifier appears in
  350. more than one place.  The best way to do this is to place each
  351. identifier on a separate line and use '<^>' to place the identifier
  352. in the "parent" line of the outline.  The reason users should place
  353. each identifier on a separate line is that they can reference a
  354. line.  Users should not simply retype or copy identifiers because
  355. that creates new instances of the identifier.  The new line created
  356. by a copy is distinct from the originals.  The "mark" and
  357. "reference" commands enable users to create another appearance of a
  358. line, where both the original appearance and the new appearance
  359. refer to the same instance of the line.  When a user makes a change
  360. to a line that appears in more than one place (because it is
  361. referenced) the change is implemented at all locations.  A user can
  362. create a new appearance of a line by:
  363.  
  364.      1. If any lines are already marked, press [Alt-U] to unmark all
  365.      lines.
  366.  
  367.      2. "mark" the line(s).
  368.  
  369.      3. move the cursor to the parent of the new appearance(s).
  370.  
  371.      4. press [Alt-=] to "reference" the marked line(s).
  372.  
  373. There are three ways to mark a line:
  374.  
  375.      1. Users can mark an unmarked line and unmark a marked line by
  376.      double clicking the left mouse button.
  377.  
  378.      2. Users can mark the next (or previous) line with a specified
  379.      substring.  The command for this is named "Mark if found" and
  380.      its hot key is [Ctrl-F6].  
  381.  
  382.      3. Users can position the cursor on a line and press
  383.      [Alt-Space] to mark an unmarked line and unmark a marked line. 
  384.  
  385. Appearances of a referenced line identify themselves by displaying
  386. a unique number, followed by the number of children they have.  It
  387. looks like this:
  388.  
  389.      a referenced line {1234567890:5}
  390.  
  391. If she references an identifier where it makes sense, she will
  392. benefit in the following ways:
  393.  
  394.      1. She can use the "Go to parent" command [F7] to see a list of
  395.      everywhere that identifier is used in the source code.  
  396.  
  397.      2. Any change he makes to one appearance of an identifier is
  398.      implemented at all appearances of that identifier.
  399.  
  400. Using ":>" and "<^>" together
  401.  
  402. Below is an example Pascal program that reads two numbers and prints
  403. out their product:
  404.  
  405. Program MultiplyTwo;
  406.   {This program reads in two numbers and prints the product}
  407.     Var
  408.       FirstNumber : Integer {The first number};
  409.       SecondNumber : Integer {The second number};
  410.       MyResult : Integer {The answer};
  411.   Function MultiplyTwoNumbers(OneNumber : Integer;AnotherNumber :
  412. Integer) : Integer;
  413.     begin
  414.       MultiplyTwoNumbers := 
  415.         OneNumber * 
  416.         AnotherNumber;
  417.       end;
  418.   begin
  419.     readln(
  420.       FirstNumber,
  421.       SecondNumber);
  422.     MyResult := MultiplyTwoNumbers(
  423.       FirstNumber,
  424.       SecondNumber);
  425.     writeln(
  426.       'The first: ',
  427.       FirstNumber,
  428.       ' The Second: ',
  429.       SecondNumber,
  430.       ' The Product: ',
  431.       MyResult);
  432.     end.
  433.  
  434. EVOLVE! will generate this program source code from the following
  435. outline:
  436.  
  437. Program MultiplyTwo;:>;:>.
  438.   {<^>}
  439.     This program reads in two numbers and prints the product
  440.     Var:>;
  441.       <^> : <^> {The first number}
  442.         FirstNumber {18269:0}
  443.         Integer {18274:0}
  444.       <^> : <^> {The second number}
  445.         SecondNumber {18287:0}
  446.         Integer {18274:0}
  447.       <^> : <^> {The answer}
  448.         MyResult {18302:0}
  449.         Integer {18274:0}
  450.   Function <^>(<^>;<^>) : <^>;
  451.     MultiplyTwoNumbers {18318:0}
  452.     <^> : <^>
  453.       OneNumber {18331:0}
  454.       Integer {18274:0}
  455.     <^> : <^>
  456.       AnotherNumber {18346:0}
  457.       Integer {18274:0}
  458.     Integer {18274:0}
  459.     begin:>;:>end
  460.       <^> := :> * 
  461.         MultiplyTwoNumbers {18318:0}
  462.         OneNumber {18331:0}
  463.         AnotherNumber {18346:0}
  464.       
  465.   begin:>;:>end
  466.     readln(:>,:>)
  467.       FirstNumber {18269:0}
  468.       SecondNumber {18287:0}
  469.     <^> := <^>(:>,:>)
  470.       MyResult {18302:0}
  471.       MultiplyTwoNumbers {18318:0}
  472.       FirstNumber {18269:0}
  473.       SecondNumber {18287:0}
  474.     writeln(:>,:>)
  475.       'The first: '
  476.       FirstNumber {18269:0}
  477.       ' The Second: '
  478.       SecondNumber {18287:0}
  479.       ' The Product: '
  480.       MyResult {18302:0}
  481.  
  482. The above outline explicitly defines the structure of the program. 
  483. When a programmer, using EVOLVE!, has an outline with an explicitly
  484. defined structure he can efficiently manage the source code changes. 
  485. He can also use the outline to dynamically inspect the program's
  486. structure to evaluate the consequences of possible changes.
  487.  
  488. The reader should not let the size of the above outline mislead him
  489. to think that it takes more keystrokes to build the outline than to
  490. type the source code.  The "Marking" commands let users reference an
  491. identifier with fewer keystrokes than it takes to type it.
  492.  
  493. To summarize this section, EVOLVE! is a source code structure
  494. editor.  The user can "mark" and "reference" identifiers to
  495. explicitly define part of the semantic structure.  The user can
  496. define the rest of the semantic structure with the "<^>"
  497. character.  When the user invokes the "report" function, EVOLVE!
  498. replaces each "<^>" with the text of a child in the outline.  The
  499. user can define some of the syntactic structure with the ":>"
  500. string.  Together, the syntactic and semantic structures comprise
  501. the structure of the program's source code.  EVOLVE! enables users
  502. to explore and edit a program's structure explicitly and
  503. dynamically. 
  504.  
  505. How to use EVOLVE!
  506.  
  507. This chapter explains how to use EVOLVE!.  The first section
  508. describes general features of the user interface.  The second
  509. section gives an example of how to transform a source code  file
  510. into an outline.  The third section explains the macro-programming 
  511. language.
  512.  
  513. The user interface
  514.  
  515. EVOLVE!'s user interface has the general features common to most
  516. modern software programs.  These general features are pull down
  517. menus, shortcuts, windows, status line, and dialog boxes.
  518.  
  519. The menu bar and menus
  520.  
  521. The menu bar is your primary access to all the menu commands. 
  522. You'll see a highlighted menu title when the menu bar is active;
  523. this is the currently selected menu.  Here is how you choose menu
  524. commands using just the keyboard:
  525.  
  526. 1. Press [F10].  This makes the menu bar active.
  527.  
  528. 2. Use the arrow keys to select a sub-menu to display.  Then press
  529. [Enter].
  530.  
  531. As a shortcut to this step, a user can just press the highlighted
  532. letter of the sub-menu title.  For example, from the menu bar,
  533. press [F] to quickly display the file menu.  From anywhere, press
  534. [Alt] and the highlighted letter to display the menu you want.
  535.  
  536. 3.  Use the arrow keys again to select the command desired.  Then
  537. press [Enter]. 
  538.  
  539. Again, as a shortcut, users can just press the highlighted letter
  540. of a command to choose it once the menu is displayed.
  541.  
  542. At this point, EVOLVE! either carries out the command, displays a
  543. dialog box, or displays another menu.
  544.  
  545. Shortcuts
  546.  
  547. A user can access many items in the menus with key combinations
  548. called shortcuts.  These key combinations are shown to the right
  549. of the menu item in the menu boxes, and to the left of the command
  550. in the status line.  On page 33 there begins a list of menu items
  551. and their associated shortcuts.  This list is sorted by shortcut
  552. key.
  553.  
  554. Windows
  555.  
  556. Windows in EVOLVE! have the following:
  557.  
  558.      1. A title at the center of the top border.  The title is the
  559.      name of the file associated with the window.
  560.  
  561.      2. A window number.  You can quickly select a window by
  562.      pressing [Alt] and the number of the window.
  563.  
  564.      3. Horizontal and vertical scroll bars to show you the
  565.      location of your view into a virtual screen.
  566.  
  567.      4. A position indicator at the left of the lower window
  568.      border that displays the row and column of the cursor.
  569.  
  570.      5. A 'splat' character that appears to the left of the
  571.      position indicator when you have changed the program since
  572.      the last save.
  573.  
  574. The status line
  575.  
  576. The status line appears at the bottom of the screen.  It reminds
  577. you of basic keystrokes and shortcuts applicable at that moment in
  578. the active window.
  579.  
  580. Dialog boxes
  581.  
  582. When a user is making settings in dialog boxes, they work with
  583. four basic types of on-screen controls: radio buttons, action
  584. buttons, input boxes, and list boxes.
  585.  
  586. Users can use [Tab] to select the next control in the dialog box
  587. and [Shift-Tab] to select the previous control in the dialog. 
  588. Most controls have labels with one letter highlighted.  Users can
  589. select a control object by pressing [Alt] and the highlighted
  590. letter.  Users can close the dialog box by either selecting the
  591. "OK" button to accept the data in the box and press [Enter], or
  592. cancel any action by the box by pressing [Escape] or selecting a
  593. "Cancel" button and pressing return.  
  594.  
  595. Radio buttons work like the buttons on a radio; they represent
  596. mutually exclusive choices.  Use [Tab] or [Shift-Tab] to select
  597. the group of radio buttons.  Then select the item you want with
  598. the up and down arrow keys and press [Space] to toggle that item. 
  599. Toggling a radio button untoggles the previously toggled button. 
  600. Input boxes are fields where text is entered and edited.  
  601.  
  602. Most basic text editing keys work in the text box.  If an input
  603. box has a down-arrow icon to its right, there is a history list
  604. associated with the input box.  Press [Down Arrow] to view the
  605. history list and enter to select an item from the list.  This
  606. list will display any text you typed into the box the last few
  607. times you used it.  Users can edit any item in the history list. 
  608. Press [Escape] to exit the history list without making a
  609. selection.
  610.  
  611. A final component of many dialog boxes is a list box.  A list box
  612. lets you scroll through and select from variable-length lists
  613. without leaving a dialog box.  If a blinking cursor appears in the
  614. list box and the user knows what he is looking for, he can type
  615. the first letters of the text and the listbox will search for it. 
  616. He can move through the list with [Up Arrow] and [Down Arrow].
  617.  
  618. How to transform a source code file into an outline that
  619. explicitly defines the structure of the program
  620.  
  621. This section is an example of how to transform the source code of
  622. a program into an outline in EVOLVE!.
  623.  
  624.      1. Press return at the opening screen to get rid of it.
  625.  
  626.      2. Press [Ctrl-F8] to import an ASCII file.
  627.  
  628.      3. Select the name of a file already on the disk.
  629.  
  630.      4. Press [F9] to save the outline as a file with a different
  631.      extension, preferably ".MNT".
  632.  
  633.      5. Press [Alt-X] to exit.
  634.  
  635. A programmer should be able to produce source code from this
  636. outline now by pressing [Ctrl-F7], which invokes the report to
  637. file function.
  638.  
  639. The outline as it stands now does not explicitly define the
  640. structure of the program.  You can transform the outline into an
  641. explicit representation of the source code structure through a
  642. range of strategies.  This range of strategies is bounded by two
  643. extremes:  all at once, or as needed.
  644.  
  645. This section first discusses defining the semantic structure
  646. explicitly, and then defining the syntactic structure explicitly. 
  647. An explicitly defined semantic structure will enable users to gain
  648. the full utility of the "Go to parent" command, [F7].  This
  649. command will let you see all the lines of source code that use a
  650. given identifier.
  651.  
  652. The all at once strategy, for the semantic structure, is to
  653. start at the top of the outline and perform the
  654. "Search,Extract,Mark/Reference" command for each identifier.  This
  655. command is found in the "Marking" menu.  
  656.  
  657. The step above specifies a lot of work if the user chooses to
  658. transform the outline all at once.  However, there is another
  659. strategy that may be more practical for some cases.  A programmer 
  660. can transform the outline a little at a time as he needs it.  When
  661. he has to make a source code modification, he performs the steps
  662. specified above, but only for the identifiers relevant to the
  663. source code modification.
  664.  
  665. An explicitly defined syntactic structure is useful, but not as
  666. useful as an explicitly defined semantic structure.  The syntactic
  667. structure is defined with the ":>" string.  Languages like C and
  668. Pascal use special syntax to delimit lists of things.  In Pascal,
  669. each invocation of a function that takes parameters must include a
  670. list of parameters to pass to that function.  This list of
  671. parameters in the invocation begins with a left parenthesis, ends
  672. with a right parenthesis, and separates each item in the list with
  673. a comma.  I do not recommend a programmer explicitly define the
  674. syntactic structure of a function call with ":>" if it is fully
  675. contained in one line of text.  However, there are some cases
  676. where function calls are nested to form a hierarchy.  Some user
  677. interface tools encourage programmers to define menu structures
  678. this ways.  The syntax can get difficult to manage.  A programmer
  679. can use the ":>" string most efficiently for that case.  I suggest
  680. programmers start at the deepest levels of the outline and look
  681. for places they can extract the syntax to the parent line.
  682.  
  683. In short, the way to transform a source code file is to import it
  684. as an ASCII file, then use the 'Search, Extract, Mark/Reference'
  685. command on identifiers.
  686. EVOLVE!'s Script Programming Language
  687.  
  688. Sometimes a users finds herself performing a similar sequence of
  689. commands through the use of menus or hotkeys.  Users can sometimes
  690. automate these sequences of commands by using a script program. 
  691. These scripts are outlines themselves, where each line is either a
  692. script command, an expression, or a data item.  You can execute
  693. any part of an outline as a script by placing the cursor on the
  694. first line of the script and pressing [Alt-F10].    
  695. Most of the menu items that operate within the context of just one
  696. window have an equivalent script command.  For example, the 'Move
  697. cursor' menu has an item 'to first line' that performs the same
  698. function as the script command 'cmFirstLine'.  Another example is
  699. the 'Go to line number' menu item which is equivalent to the
  700. script command 'cmGoToLine'.  This script command looks for the
  701. line number in the first child of its line.  All the script
  702. commands that are similar to menu items are outline script
  703. commands.  This user's guide explains each outline script command
  704. with its corresponding menu item in the user interface reference.
  705.  
  706. EVOLVE! augments the power of the outline script commands with
  707. data flow script commands and control flow script commands.  Data
  708. flow script commands evaluate expressions and move the result to
  709. other lines.  Control flow commands control the sequence in which
  710. EVOLVE! executes the script commands.
  711.  
  712. The data flow commands are: 
  713.  
  714.      cmMoveOutlineData 
  715.      cmMoveOutlineNumber 
  716.      cmMoveProgramData 
  717.      cmMoveProgramNumber
  718.      cmMoveProgram2Outline
  719.  
  720. The cmMoveOutlineData and cmMoveOutlineNumber act on the outline
  721. with out affecting the script as it is currently executing.  When
  722. you execute part of an outline as a script, EVOLVE! first makes a
  723. copy of the script so any changes the script makes to the outline
  724. will not accidentally interfere with the script.  This copy is
  725. executed as the script program and deleted at the end of the
  726. script's execution.  At the moment of replication, the script's
  727. current instruction corresponds to the outline's current line. 
  728. However, after replication the script and the outline are 
  729. separate and independent.  Thus, we can write script's that safely
  730. alter the outline without accidentally interfering with the
  731. script's execution.  
  732.  
  733. These 'cmMoveOutline...' commands act on the children of the
  734. current line in the outline.  They take information from the first
  735. child and pass the information to all other children of the
  736. current line.  Likewise, the cmMoveProgramNumber and
  737. cmMoveProgramData affect the script that is currently executing,
  738. and will not affect the outline.  These commands act on the
  739. children of the current instruction in the script.  They both
  740. transfer data from the first child of the current instruction to
  741. all other children of the current instruction.  The
  742. cmMoveProgram2Outline command transfers data from the current
  743. instruction to the outline's current line.
  744.  
  745. The commands that end with the word 'Number' evaluate the first
  746. child as a real number expression.  A real number expression is
  747. simply a real number or an expression that produces a real number. 
  748. Below is a list of expression that produce a real number.
  749.  
  750.      +    Sum all children of the this script line
  751.      -    Negate and sum all children of this script line
  752.      /    divide the first child of this script line by the
  753.           product of all other children 
  754.      *    multiply all children of this script line
  755.      ?    the position of the outline's current line among its
  756.           siblings, less one.  If the outline's current line is
  757.           the first child of its parent, it returns 0.  If the
  758.           outline's current line is the second child of its
  759.           parent, it returns 1.  Etc...
  760.      #    the number of children under the outline's current line
  761.      <=>  compares the first two children of this script line as
  762.           numeric expressions.
  763.  
  764.                Result    Meaning
  765.                =============================================
  766.                1         First child is less than second
  767.                2         First and second child are equal
  768.                3         Second child is less than the first child
  769.                4         There is an error
  770.  
  771.      ==   This test to see if all the children of the outline's
  772.           current line are references of the same line.  If two 
  773.           lines are references of the same line they will have the
  774.           same two numbers inside of curly brackets to the right
  775.           of their text.
  776.  
  777.                Result    Meaning
  778.                ====================
  779.                1         all reference the same line
  780.                2         not all the same
  781.                3         Error
  782.  
  783.      =    test to see if the text in each child of this script
  784.           line the are all equal
  785.  
  786.                Result    Meaning
  787.                =============================================
  788.                1         First child is less than second
  789.                2         First and second child are equal
  790.                3         Second child is less than the first child
  791.                4         There is an error
  792.  
  793.  
  794. The commands that end with the word 'data' process the first child
  795. as a text expression.  A text expression is simply a line of text
  796. or an expression that produces a line of text.  Each occurrence of
  797. the string <^> is replaced with the text produced by a child.  The
  798. first occurrence is replaced by the text produced by the first
  799. child.  The second occurrence is replaced by the text produced
  800. from the second child, and so forth.  
  801.  
  802.  
  803. Example 1 of cmMoveOultineData:
  804.  
  805. Before execution
  806.  
  807.      cmMoveOutlineData  This is the first line, place cursor here
  808.      1. Hello world.
  809.      2.
  810.  
  811. After execution
  812.  
  813.      cmMoveOutlineData  This is the first line, place cursor here
  814.      1. Hello world.
  815.      2. Hello world.
  816.  
  817. Example 2 of cmMoveOutlineData with a text expression
  818.  
  819. Before execution
  820.  
  821.      cmMoveOutlineData
  822.      1. <^> <^>.
  823.        1. Hello
  824.        2. world
  825.      2.
  826.  
  827. After execution
  828.  
  829.      cmMoveOutlineData
  830.      1. <^> <^>.
  831.        1. Hello
  832.        2. world
  833.      2. Hello world.
  834.  
  835. Example 3 cmMoveOutlineNumber
  836.  
  837. Before execution
  838.  
  839.      cmMoveOutlineNumber
  840.      1. 5.5
  841.      2.
  842.  
  843. After execution
  844.  
  845.      cmMoveOutlineNumber
  846.      1. 5.5
  847.      2. 5.5000000000E+00
  848.  
  849. Example 4 cmMoveOutlineNumber with an expression
  850.  
  851. Before execution
  852.  
  853.      cmMoveOutlineNumber
  854.      1. +
  855.        1. 2.3
  856.        2. 3.2
  857.      2.
  858.  
  859. After execution
  860.  
  861.      cmMoveOutlineNumber
  862.      1. +
  863.        1. 2.3
  864.        2. 3.2
  865.      2. 5.5000000000E+00
  866.  
  867. The cmMoveProgramData and cmMoveProgramNumber commands are similar
  868. but they do not affect the outline.  These commands perform
  869. similar functions on the script program.
  870.  
  871. The command cmMoveProgram2Outline will evaluate the first child of
  872. the current instruction as a text expression, and set the current
  873. line in the outline to that result.
  874.  
  875. The control flow commands are: DoAll, DoOne, Loop, and Pop.  
  876.  
  877. DoAll will execute each child of the current instruction as a
  878. command.  
  879.  
  880. DoOne will evaluate the first child of the current instruction as
  881. an expression that produces a number.  The result of the first
  882. child of the current instruction indicates which child, if any,
  883. will succeed it as the current instruction.  The Nth child of
  884. DoOne is executed if N is the lowest upper bound of the numeric
  885. result from the first child.  If the first child is the value 5
  886. then the sixth child will execute next.  After the sixth child
  887. executes, the next instruction will be the sibling following the
  888. DoOne command.  In other words, the script will not execute more
  889. than one child of a DoOne instruction.
  890.  
  891. Loop, like DoAll, will execute each child as a command.  In
  892. addition, Loop will repeat itself by starting with the first child
  893. again after the last child is executed.  
  894.  
  895. The only way to stop the Loop cycle is with a Pop command.  Pop
  896. will exit out of the current Loop.  Pop will also exit out of a
  897. DoAll.  When Loop's and DoAll's are nested, Pop will exit out of
  898. the last DoAll or Loop that the EVOLVE! script is still
  899. processing.
  900.  
  901. The user can execute any part of an outline as a script by placing
  902. the cursor on the first line of the script and pressing [Alt-F10]. 
  903. Each line in the script can be one command or data item.  Any text
  904. to the right of a script command in a line is ignored, so we may
  905. use this space to place comments.  A script command can be a
  906. control flow command, data flow command, or an outline command. 
  907. The control flow commands direct the order in which script
  908. instructions take their turn as the current instruction.  Data
  909. Flow commands move information through the outline and the script. 
  910. The outline script commands act on the outline, and they
  911. correspond to a similar menu command.  The script outline commands
  912. are a subset of the commands available through the EVOLVE! menu. 
  913. The reference section documents each script outline command with
  914. its corresponding menu item.  
  915.  
  916. The following examples use the data flow, control flow and outline
  917. commands listed in this chapter.
  918.  
  919. Before execution 
  920.  
  921. Example 7
  922. `-DoAll add lines with numbers in them
  923.   `-Loop through this
  924.     |-DoOne
  925.     | |-<=>
  926.     | | |-0 count {48173600:0}
  927.     | | `-5
  928.     | |-cmAddSibling makes a new blank line below this script
  929.     | `-Pop out of this loop
  930.     |-cmMoveProgramNumber  This increments the loop counter
  931.     | |-+
  932.     | | |-1
  933.     | | `-0 count {48173600:0}
  934.     | `-0 count {48173600:0}
  935.     `-cmProgram2Outline  sends the value of count to new line
  936.       `-0 count {48173600:0}
  937.  
  938. After execution 
  939.  
  940. Example 7
  941. |-DoAll add lines with numbers in them
  942. | `-Loop through this
  943. |   |-DoOne
  944. |   | |-<=>
  945. |   | | |-0 count {48173600:0}
  946. |   | | `-5
  947. |   | |-cmAddSibling makes a new blank line below this script
  948. |   | `-Pop out of this loop
  949. |   |-cmMoveProgramNumber  This increments the loop counter
  950. |   | |-+
  951. |   | | |-1
  952. |   | | `-0 count {48173600:0}
  953. |   | `-0 count {48173600:0}
  954. |   `-cmProgram2Outline  sends the value of count to new line
  955. |     `-0 count {48173600:0}
  956. |- 1.0000000000E+00
  957. |- 2.0000000000E+00
  958. |- 3.0000000000E+00
  959. |- 4.0000000000E+00
  960. `- 5.0000000000E+00
  961.  
  962.  
  963.  
  964. Command Reference
  965.  
  966. A user can select any menu item he sees displayed at the top of
  967. the screen by holding down [Alt] key and the highlighted letter in
  968. the menu choice.  If the menu is active, don't use [Alt], just use
  969. the highlighted letter.  A user can activate the main menu by
  970. pressing [F10].  Also, he can press [Alt-F] or [Alt-R] or [Alt-M]
  971. or [Alt-E] or [Alt-W] or [Alt-A] to activate the main menu and the
  972. associated submenu.  Many commands lead to dialog boxes.  When
  973. these dialog buttons come up, they usually have the "cancel"
  974. option highlighted.  If a user presses return, the box will go
  975. away and no changes will be made.  If a user wants to do something
  976. in a dialog box, he can press [Tab] to move to the first object in
  977. the box.  Likewise, [Shift-Tab] will move him to the previous
  978. object in the box.
  979.  
  980. Menu structure
  981. The Menu Structure is:
  982.  
  983. Menus                               [F10]
  984. I. File                             [Alt-F]
  985.   A. Open                           [F3]
  986.   B. Save                           [F2]
  987.   C. Save As                        [F9]
  988.   D. Change Directory               [Shift-F9]
  989.   E. Print                          [Ctrl-PrtScr]
  990.   F. Print to File                  [Shift-F7]
  991.   G. Report to File                 [Ctrl-F7]
  992.   H. Import ASCII File              [Ctrl-F8]
  993.   I. Dos Shell
  994.   I. Exit                           [Alt-X]
  995. II. Relocate Items                  [Alt-R]
  996.   A. Line to clipboard              [Shift-F1]
  997.   B. Tree to clipboard              [Ctrl-F1]
  998.   C. Line from clipboard            [Shift-F2]
  999.   D. Tree from clipboard            [Ctrl-F2]
  1000.   E. Marked Lines to under current  [Shift-F3]
  1001.   F. Tree left a level              [Ctrl-Left]
  1002.   G. Tree right a level             [Ctrl-Right]
  1003.   H. Tree up                        [Ctrl-PgUp]
  1004.   I. Tree Down                      [Ctrl-PgDn]
  1005.   J. Sort
  1006.     1. Ascending                    Grey-Plus
  1007.     2. Descending                   Grey-Minus
  1008. III. Move Cursor                    [Alt-M]
  1009.   A. to child                       [F4]
  1010.   B. to parent                      [F7]
  1011.   C. to sibling                     [F8]
  1012.   D. to marked                      [Alt-J]
  1013.   E. to any report line             [Ctrl-F9]
  1014.   F. to descendant report line      [Alt-F9]
  1015.   G. Search                         [Alt-S]
  1016.   H. Go to line #                   [Alt-G]
  1017.   I. First line                     [Ctrl-Home]
  1018.   J. Last line                      [Ctrl-End]
  1019.   K. Up a line                      [Up]
  1020.   L. Down a line                    [Down]
  1021.   M. Up a screen                    [PgUp]
  1022.   N. Down a screen                  [PgDn]
  1023.   N. to basis of current
  1024. IV. Edit                            [Alt-E]
  1025.   A. Add a line
  1026.     1. as a child of current        [Ctrl-Enter]
  1027.     2. as a sibling of current      [Enter]
  1028.     3. as a parent of current       [Ctrl-F3]
  1029.     4. as the first line
  1030.   B. Copy
  1031.     1. Current line to clipboard    [Alt-C]
  1032.     2. Current tree to clipboard    [Alt-K]
  1033.     3. Marked lines to clipboard    [Shift-F4]
  1034.     4. Marked trees to clipboard    [Ctrl-F4]
  1035.   C. Delete
  1036.     1. Current line                 [Alt-D]
  1037.     2. Current tree                 [Shift-Delete]
  1038.   D. Display
  1039.     1. Hide children                [Alt-H]
  1040.     2. Show children of current     [Alt-F8]
  1041.     3. Show all children
  1042.     3. Select display style
  1043.   E. Undo                           [Esc]
  1044. V. Marking                          [Alt-A]
  1045.   A. Mark/Unmark a line             [Alt-Space]
  1046.   B. Reference marked lines         [Alt-=]
  1047.   C. Unmark all lines               [Alt-U]
  1048.   D. Mark if found                  [Ctrl-F6]
  1049.   E. Search,Extract,Mark/Reference
  1050. VI. Window                          [Alt-W]
  1051.   A. Next                           [F6]
  1052.   B. Previous                       [Shift-F6]
  1053.   C. Close window                   [Alt-F3]
  1054.   D. Tile windows                   [Alt-Z]
  1055.   E. Cascade windows                [Shift-F8]
  1056.   F. Size/Move window               [Ctrl-F5]
  1057.   G. Zoom                           [F5]
  1058.   H. Open Clipboard
  1059.  
  1060. In addition, a single click of the left mouse button sets the
  1061. cursor to a line, and a double click marks or unmarks a line.
  1062.  
  1063. Description of commands
  1064.  
  1065. Edit|Add a line|As a child of current     Ctrl-Enter
  1066. Creates a new line and inserts it as a child of the current line.
  1067.  
  1068.      Script: cmAddLine
  1069.  
  1070. Edit|Add a line|As a sibling of current   Enter
  1071. Creates a new line and inserts it as a sibling of the current
  1072. line.
  1073.  
  1074.      Script: cmAddSibling
  1075.  
  1076. Edit|Add a line|as a parent of current    Ctrl-F3
  1077. Creates a new line and inserts it as the parent of the current
  1078. line.
  1079.  
  1080.      Script: cmAddBranch
  1081.  
  1082. Edit|Add a line|as the first line
  1083. Creates a new root line and inserts the old root into the new
  1084. root.
  1085.  
  1086.      Script: cmAddRoot
  1087.  
  1088. Edit|Copy|Current line to clipboard       Alt-C
  1089. Copies a line from the current window to the clip board.  The
  1090. children of the line (if any) are not copied.  If the clip board
  1091. is not open yet, EVOLVE! will open it.
  1092.  
  1093. Edit|Copy|Marked lines to clipboard       Shift-F4
  1094. Copy marked lines to the current line of the clipboard.
  1095. This command will open the clipboard if necessary.
  1096.  
  1097. Edit|Copy|Marked trees to clipboard       Ctrl-F4
  1098. Copy marked trees to the current line of the clipboard.
  1099. This command will open the clipboard if necessary.
  1100.  
  1101. Edit|Copy|Tree to clipboard               Alt-K
  1102. Copies a subtree from the current window to the clip board.
  1103. This command will open the clipboard if necessary.
  1104.  
  1105. Edit|Delete|Current line                  Alt-D
  1106. Deletes the current line from the current window.
  1107. If the line has children, the line's parent will adopt them.
  1108.  
  1109.      Script: cmDelLine
  1110.  
  1111. Edit|Delete|Current tree                  Shift-Delete
  1112. Erases the current subtree in the current window.
  1113.  
  1114.      Script: cmDelTree
  1115.  
  1116. Edit|Display|Hide children                Alt-H
  1117. Hides the children of the current line.
  1118.  
  1119.      Script: cmHideKids
  1120.  
  1121. Edit|Display|Select display style
  1122. EVOLVE! provides four styles for outlines:
  1123.  
  1124.      1. A conventional outlining style.
  1125.      2. A numbered list style.
  1126.      3. Blanks only.
  1127.      4. Line drawing characters.
  1128.  
  1129. Below are examples of the four styles.
  1130.  
  1131. Outline Title
  1132. I. First Main topic
  1133.   A. First Subtopic
  1134.     1. First sub-sub-topic
  1135.       i) Minor topic
  1136.         a) Minor point
  1137.           1) Sub-minor point
  1138.           2) Another sub minor point
  1139.         b) Another minor point
  1140.       ii) Another minor topic
  1141.     2. Second sub-sub-topic
  1142.   B. Second subtopic
  1143. II. Second main topic
  1144.  
  1145.  
  1146. Outline Title
  1147. 1. First Main topic
  1148.   1. First Subtopic
  1149.     1. First sub-sub-topic
  1150.       1. Minor topic
  1151.         1. Minor point
  1152.           1. Sub-minor point
  1153.           2. Another sub minor point
  1154.         2. Another minor point
  1155.       2. Another minor topic
  1156.     2. Second sub-sub-topic
  1157.   2. Second subtopic
  1158. 2. Second main topic
  1159.  
  1160. Outline Title
  1161.   First Main topic
  1162.     First Subtopic
  1163.       First sub-sub-topic
  1164.         Minor topic
  1165.           Minor point
  1166.             Sub-minor point
  1167.             Another sub minor point
  1168.           Another minor point
  1169.         Another minor topic
  1170.       Second sub-sub-topic
  1171.     Second subtopic
  1172.   Second main topic
  1173.  
  1174. Outline Title
  1175. |-First Main topic
  1176. | |-First Subtopic
  1177. | | |-First sub-sub-topic
  1178. | | | |-Minor topic
  1179. | | | | |-Minor point
  1180. | | | | | |-Sub-minor point
  1181. | | | | | `-Another sub minor point
  1182. | | | | `-Another minor point
  1183. | | | `-Another minor topic
  1184. | | `-Second sub-sub-topic
  1185. | `-Second subtopic
  1186. `-Second main topic
  1187.  
  1188. Edit|Display|Show all children
  1189. Shows every line of the outline.
  1190.  
  1191.      Script: cmShowAllKids
  1192.  
  1193. Edit|Display|Show children of current     Alt-F8
  1194. Shows the children of the current line.
  1195.  
  1196.      Script: cmShowKids
  1197.  
  1198. Edit|Undo                                 Esc
  1199. Undoes the changes to the current line.  This only has an effect
  1200. if the cursor has not moved off the line since the changes were
  1201. made.
  1202.  
  1203.      Script: cmUndo
  1204.  
  1205. File|Change Directory                     Shift-F9
  1206. File│Change Dir brings up the Change Directory dialog box, in
  1207. which you can change the current directory.
  1208.  
  1209. File|Dos Shell
  1210. Shells to DOS.  This allows you access to DOS without closing
  1211. EVOLVE!.  
  1212.  
  1213.      Script: cmExec
  1214.  
  1215. The script version of this command is slightly different.  It does
  1216. not shell to DOS, rather it executes each child line as a DOS
  1217. command.  When EVOLVE! executes this script command, it takes the
  1218. first word in each line and looks for an executable file of that
  1219. name.  If the first token is not the name of an executable file,
  1220. EVOLVE! attempts to execute the line through the command processor
  1221. specified by the COMSPEC environment variable.  This command
  1222. processor is usually 'command.com' which will process commands
  1223. like 'Dir.'
  1224.  
  1225. File|Exit                                 Alt-X
  1226. The Exit command terminates this program.
  1227.  
  1228. File|Import ASCII File                    Ctrl-F8
  1229. Reads an ASCII file and transforms it into an outline.  This is
  1230. the complement of Report.
  1231.  
  1232.      Script: cmTroper
  1233.  
  1234. In the script, the first child is taken as the name of the file to
  1235. import.
  1236.  
  1237. File|Open                                 F3
  1238. The Open command displays the Open a File dialog box. In this
  1239. dialog box you select the data file you want to use.
  1240.  
  1241. The "Open a File" dialog box contains:
  1242.  
  1243.  ■ an input box with a history list
  1244.  ■ a list box to browse the directory
  1245.  ■ the standard Cancel button
  1246.  ■ Open action button
  1247.  ■ an information panel that describes the
  1248.    selected file
  1249.  
  1250.      Script: cmFOpen
  1251.  
  1252. In the script, the first child is taken as the name of the file to
  1253. open.
  1254.  
  1255. File|Print                                Ctrl-PrtScr
  1256. Prints the outline in the current window.
  1257.  
  1258.      Script: cmPrint
  1259.  
  1260. File|Print to File                        Shift-F7
  1261. Prints the outline descendant from the current line to a file.
  1262.  
  1263.      Script: cmPrint2F
  1264.  
  1265. In the script, EVOLVE! takes the first child to be the name of the
  1266. file to print to.
  1267.  
  1268. File|Report to File                       Ctrl-F7
  1269. Prints a report to a file. The report is produced by processing
  1270. the outline.  The blank display style used so no line drawing
  1271. characters, roman numerals, or numbering will be put into the
  1272. report file by EVOLVE!.  EVOLVE! will look for the ":>" to define
  1273. text to print after its children.  The first ":>" starts the
  1274. string that EVOLVE! appends to the end of each terminal descendant
  1275. except the last terminal descendant.  The second ":>" string
  1276. defines the string that EVOLVE! appends to the end of the last
  1277. terminal descendant.  A terminal descendant is the last child
  1278. itself if there are no children of the last child.  Otherwise, the
  1279. terminal descendant is the terminal descendant of the last child.
  1280.  
  1281.      Script: cmReport
  1282.  
  1283. File|Save                                 F2
  1284. Saves an outline (the current line and all descendant lines) in
  1285. the current window to a data file.
  1286.  
  1287. File|Save As                              F9
  1288. Enables you to save an outline to a file name other than the one
  1289. shown as the title of the window.  The outline saved will be the
  1290. current line and all descendants.
  1291.  
  1292.      Script: cmFSaveAs
  1293.  
  1294. In the script, EVOLVE! takes the first child to be the name of the
  1295. file to save the outline to.
  1296.  
  1297. Marking|Mark if found                     Ctrl-F6
  1298. Marks the first line found that contains the substring you
  1299. specify.
  1300.  
  1301. Marking|Mark/Unmark current line          Alt-Space
  1302. If the current line is unmarked, this command marks it.  If the
  1303. current line is marked, this command unmarks it.  Marked lines
  1304. form a set of lines that the user may reference at other
  1305. locations, or jump to with the 'Move cursor|Go to marked' menu
  1306. item.
  1307.  
  1308.      Script: cmMark
  1309.  
  1310. Marking|Reference marked lines            Alt-=
  1311. References all marked lines.
  1312.  
  1313.      Script: cmReference
  1314.  
  1315. Marking|Search,Extract,Mark/Reference
  1316. This command performs the following steps:
  1317.  
  1318.      1. Unmark all marks.
  1319.  
  1320.      2. Searches for the specified text and conditions.
  1321.  
  1322.      3. Asks the user to confirm marking/referencing the text
  1323.      found.
  1324.  
  1325.      4. Extracts the text from the line and replaces it with
  1326.      "<^>".
  1327.  
  1328.      5. If nothing is marked, the extracted text is inserted as a
  1329.      child and the new child is referenced.  The new child has the
  1330.      correct position to be processed by the "<^>" during a
  1331.      report.
  1332.  
  1333.      6. If something has been marked, the mark is referenced.  The
  1334.      referenced child is positioned such that it will be processed
  1335.      by the "<^>" during a report.
  1336.  
  1337. The text produced by a report after this process is identical to
  1338. the text produced before this process.
  1339.  
  1340. Marking|Unmark all lines                  Alt-U
  1341. Unmarks all marked lines.
  1342.  
  1343.      Script: cmUnMarkAll
  1344.  
  1345. Move Cursor|Down a line                   Down
  1346. Select the line below as the current one.
  1347.  
  1348.      Script: cmMoveDown
  1349.  
  1350. Move Cursor|Down a screen                 PgDn
  1351. Moves the visible portion of the window down the height of the
  1352. window.  The command moves the cursor also to keep it visible in
  1353. the window.  
  1354.  
  1355. Move Cursor|First line                    Ctrl-Home
  1356. Goes to the first line in the outline.
  1357.  
  1358.      Script: cmFirstLine
  1359.  
  1360. Move Cursor|Go to line #                  Alt-G
  1361. Moves to the selected line number.
  1362.  
  1363.      Script: cmGoToLine
  1364.  
  1365. In the script, EVOLVE! looks for the line number at the beginning
  1366. text of the first child.
  1367.  
  1368. Move Cursor|Last line                     Ctrl-End
  1369. Goes to the last line in the outline.
  1370.  
  1371.      Script: cmLastLine
  1372.  
  1373. Move Cursor|Search                        Alt-S
  1374. Search will open a dialog box where you can enter text.  EVOLVE!
  1375. will then search in the direction you specify for the next
  1376. occurrence of that text and make that occurrence the current line.
  1377.  
  1378. Move Cursor|Up a line                     Up
  1379. Selects the line above as the current line.
  1380.  
  1381.      Script: cmMoveUp
  1382.  
  1383. Move Cursor|Up a screen                   PgUp
  1384. This command moves the visible portion of the window up the height
  1385. of the window.  The command moves the cursor also to keep it
  1386. visible in the window.  
  1387.  
  1388. Move Cursor|to basis of current
  1389. Goes to the Basis.  When a line is referenced, only one instance
  1390. shows the children explicitly.  The instance that shows the
  1391. children is the basis.
  1392.  
  1393.      Script: cmGoToBasis
  1394.  
  1395. Move Cursor|to child                      F4
  1396. Select one of the current line's children as the current line.
  1397.  
  1398.      Script: cmGoToKid
  1399.  
  1400. In the script, EVOLVE! looks for the a number at the beginning of
  1401. the instruction's first child to indicate which of the current
  1402. line's children will become the next current line.  If the number
  1403. is 0 then the first child will become the current line.  In
  1404. general, if the number is N then the N+1 child will become the
  1405. current line.
  1406.  
  1407. Move Cursor|to marked                     Alt-J
  1408. Selects one of the Marked lines as the current line.  This is a
  1409. good way to see the marked lines.  The lines are shown in a
  1410. scrollable menu.  Each line begins with the line number that the
  1411. text appears at.  The text that follows the line number has the
  1412. <^> characters replaced with the appropriate text.
  1413.  
  1414.      Script: cmGoToMark
  1415.  
  1416. In the script, EVOLVE! looks for the a number at the beginning of
  1417. the instruction's first child to indicate which of the marked 
  1418. line's will become the next current line.  If the number is 0 then
  1419. the first marked line will become the current line.  In general,
  1420. if the number is N then the N+1 marked line will become the
  1421. current line.
  1422.  
  1423. Move Cursor|to parent                     F7
  1424. Selects one of the current line's parents as the current line.
  1425. This is a good way to see the parent lines.  The lines are shown
  1426. in a scrollable menu.  Each line begins with the line number that
  1427. the text appears at.  The text that follows the line number has
  1428. the <^> characters replaced with the appropriate text.
  1429.  
  1430.      Script: cmGoToParent
  1431.  
  1432. In the script, EVOLVE! looks for the a number at the beginning of
  1433. the instruction's first child to indicate which of the current
  1434. line's parents will become the next current line.  Each referenced
  1435. line will have multiple appearances and one parent per appearance. 
  1436. If the number is 0 then the first parent will become the current
  1437. line.  In general, if the number is N then the N+1 parent will
  1438. become the current line.
  1439.  
  1440.  
  1441. Move Cursor|to report line                Ctrl-F9
  1442. Displays the report text and enables you to move to the outline
  1443. entry that corresponds to the reported line.  This is a good way
  1444. to see the source code as reported.  The lines are shown in a
  1445. scrollable menu.  
  1446.  
  1447.      Script: cmGoToRepLine
  1448.  
  1449. In the script, EVOLVE! looks for the a number at the beginning of
  1450. the instruction's first child to indicate which report line will
  1451. become the next current line.  
  1452.  
  1453. Move Cursor|to descendant report line     Alt-F9           
  1454. Displays the report text and enables you to move to the outline
  1455. entry that corresponds to the reported line descendant from the
  1456. current line.  This is a good way to see the source code as
  1457. reported.  The lines are shown in a scrollable menu.  This command
  1458. is faster than 'Move Cursor| to report line' because it processes
  1459. fewer reported lines.
  1460.  
  1461.  
  1462.      Script: cmGoToDescRepLine
  1463.  
  1464. In the script, EVOLVE! looks for the a number at the beginning of
  1465. the instruction's first child to indicate which report line will
  1466. become the next current line.  
  1467.  
  1468. Move Cursor|to sibling                    F8
  1469. Selects one of the current line's siblings as the current line. 
  1470. This is a good way to see the sibling lines.  The lines are shown
  1471. in a scrollable menu.  Each line begins with the line number that
  1472. the text appears at.  The text that follows the line number has
  1473. the <^> characters replaced with the appropriate text.
  1474.  
  1475.      Script: cmGoToSibling
  1476.  
  1477. In the script, EVOLVE! looks for the a number at the beginning of
  1478. the instruction's first child to indicate which of the current
  1479. line's siblings will become the next current line.  If the number
  1480. is 0 then the first sibling will become the current line.  In
  1481. general, if the number is N then the N+1 sibling will become the
  1482. current line.
  1483.  
  1484. Relocate|Line from clipboard              Shift-F2
  1485. Takes a line from the clip board and inserts it in the current
  1486. window.  If the line has children, the line's parent will adopt
  1487. them.  If the clip board is not open yet, EVOLVE! will open it.
  1488.  
  1489. Relocate|Line to clipboard                Shift-F1
  1490. Cuts a line from the current window and inserts it in the clip
  1491. board.  If the line has children, the line's parent will adopt
  1492. them.  If the clip board is not open yet, EVOLVE! will open it.
  1493.  
  1494. Relocate|Marked lines to under current    Shift-F3
  1495. Relocates marked lines to under current.
  1496.  
  1497.      Script: cmMoveMarkedLines
  1498.  
  1499. Relocate|Sort|Ascending                   Grey-Plus
  1500. Sorts the siblings, under one branch, in ascending order.
  1501.  
  1502.      Script: cmOrderAscend
  1503.  
  1504. Relocate|Sort|Descending                  Grey-Minus
  1505. Sorts the siblings, under one branch, in descending order.
  1506.  
  1507.      Script: cmOrderDescend
  1508.  
  1509. Relocate|Tree Down                        Ctrl-PgDn
  1510. Moves the current subtree up or down by switching its position
  1511. with the sibling below.
  1512.  
  1513.      Script: cmMoveTreeDn
  1514.  
  1515. Relocate|Tree from clipboard              Ctrl-F2
  1516. Removes the current subtree from the clip board and inserts it
  1517. under the current line in the current window.
  1518.  
  1519. Relocate|Tree left a level                Ctrl-Left
  1520. Moves the current line and all its descendants such that its
  1521. grandparent becomes its new parent.
  1522.  
  1523.      Script: cmMoveTreeLeft
  1524.  
  1525. Relocate|Tree right a level               Ctrl-Right
  1526. Moves the current line and all its descendants such that its
  1527. nearest sibling above it becomes its new parent.
  1528.  
  1529.      Script: cmMoveTreeRight
  1530.  
  1531. Relocate|Tree to clipboard                Ctrl-F1
  1532. Removes a subtree from the current window and inserts it under the
  1533. current line in the clip board.  EVOLVE! opens the clip board if
  1534. it needs to do so.
  1535.  
  1536. Relocate|Tree up                          Ctrl-PgUp
  1537. Moves the current subtree up or down by switching its position
  1538. with the sibling above.
  1539.  
  1540.      Script: cmMoveTreeUp
  1541.  
  1542. Window|Cascade windows                    Shift-F8
  1543. Stacks all file viewers on the desktop.
  1544.  
  1545. Window|Close window                       Alt-F3
  1546. Closes the active window.
  1547.  
  1548. You can also click the Close box in the upper right corner to
  1549. close a window.
  1550.  
  1551. Window|Next                               F6
  1552. Cycles forwards through the windows on the desktop.
  1553.  
  1554. Window|Open Clipboard
  1555. Opens a window for the clip board.
  1556.  
  1557. Window|Previous                           Shift-F6
  1558. Cycles forwards through the windows on the desktop.
  1559.  
  1560. Window|Size/Move window                   Ctrl-F5
  1561. Changes the size or position of the active window.
  1562.  
  1563.   ====
  1564.   Size
  1565.   ====
  1566. If you press Shift while you use the arrow keys, you can change
  1567. the size of the active window. Once you've adjusted its size or
  1568. position, press Enter.
  1569.  
  1570. If a window has a Resize corner, you can drag that corner to
  1571. resize the window.
  1572.  ======
  1573.   Move
  1574.  ======
  1575. When you choose Window│Size/Move, the active window moves in
  1576. response to the arrow keys. Once you've moved a window to where
  1577. you want it, press Enter.
  1578.  
  1579. You can also move a window by dragging its title bar with the
  1580. mouse.
  1581.  
  1582. Window|Tile                               Alt-Z
  1583. Tiles all windows on the desktop.
  1584.  
  1585. Window|Zoom                               F5
  1586. Resizes the active window to the maximum size. If the window is
  1587. already zoomed, you can choose this command to restore it to its
  1588. previous size.
  1589.  
  1590. You can also double-click anywhere on the window's title bar
  1591. (except where an icon appears) to zoom or unzoom the window.
  1592. Menu items sorted by hotkey
  1593. Menu Item                                 HotKey
  1594. ----------------------------------------  ---------------
  1595. Edit|Add a line|as the first line
  1596. Edit|Display|Select display style
  1597. Move Cursor|to basis of current
  1598. Window|Open Clipboard
  1599. Marking|Reference marked lines            Alt-=
  1600. Edit|Copy|Current line to clipboard       Alt-C
  1601. Edit|Delete|Current line                  Alt-D
  1602. Window|Close window                       Alt-F3
  1603. Edit|Display|Show children of current     Alt-F8
  1604. Move Cursor|to descendant report line     Alt-F9
  1605. Execute as script program                 Alt-F10
  1606. Move Cursor|Go to line #                  Alt-G
  1607. Edit|Display|Hide children                Alt-H
  1608. Move Cursor|to marked                     Alt-J
  1609. Edit|Copy|Tree to clipboard               Alt-K
  1610. Move Cursor|Search                        Alt-S
  1611. Marking|Mark/Unmark current line          Alt-Space
  1612. Marking|Unmark all lines                  Alt-U
  1613. File|Exit                                 Alt-X
  1614. Window|Tile                               Alt-Z
  1615. Move Cursor|Last line                     Ctrl-End
  1616. Edit|Add a line|As a child of current     Ctrl-Enter
  1617. Relocate|Tree to clipboard                Ctrl-F1
  1618. Relocate|Tree from clipboard              Ctrl-F2
  1619. Edit|Add a line|as a parent of current    Ctrl-F3
  1620. Edit|Copy|Marked trees to clipboard       Ctrl-F4
  1621. Window|Size/Move window                   Ctrl-F5
  1622. Marking|Mark if found                     Ctrl-F6
  1623. File|Report to file                       Ctrl-F7
  1624. File|Import ASCII file                    Ctrl-F8
  1625. Move cursor|to report line                Ctrl-F9
  1626. Move cursor|First line                    Ctrl-Home
  1627. Relocate|Tree left a level                Ctrl-Left
  1628. Relocate|Tree down                        Ctrl-PgDn
  1629. Relocate|Tree up                          Ctrl-PgUp
  1630. File|Print                                Ctrl-PrtSc
  1631. Relocate|Tree right a level               Ctrl-Right
  1632. Move cursor|Down a line                   Down
  1633. Edit|Add a line|As a sibling of current   Enter
  1634. Edit|Undo                                 Esc
  1635. File|Save                                 F2
  1636. File|Open                                 F3
  1637. Move cursor|To child                      F4
  1638. Window|Zoom                               F5
  1639. Window|Next                               F6
  1640. Move cursor|To parent                     F7
  1641. Move cursor|To sibling                    F8
  1642. File|Save As                              F9
  1643. Relocate|Sort|Descending                  Grey-Minus
  1644. Relocate|Sort|Ascending                   Grey-Plus
  1645. Move cursor|Down a screen                 PgDn
  1646. Move cursor|Up a screen                   PgUp
  1647. Edit|Delete|Current tree                  Shift-Delete
  1648. Relocate|Line to clipboard                Shift-F1
  1649. Relocate|Line from clipboard              Shift-F2
  1650. Relocate|Marked lines to under current    Shift-F3
  1651. Edit|Copy|Marked lines to clipboard       Shift-F4
  1652. Window|Previous                           Shift-F6
  1653. File|Print to file                        Shift-F7
  1654. Window|Cascade windows                    Shift-F8
  1655. File|Change directory                     Shift-F9
  1656. Move cursor|Up a line                     Up
  1657. License Agreement
  1658.  
  1659. Richard H. Smith
  1660. 7040 Wick Lane
  1661. Derwood, MD 20855
  1662. (301) 977-4166
  1663.  
  1664. Please use copy, and distribute EVOLVE!.  This program is
  1665. distributed as Shareware.  
  1666.  
  1667. Definition of Shareware
  1668.  
  1669. Shareware distribution gives users a chance to try software before
  1670. buying it. If you try a Shareware program and continue using it,
  1671. you are expected to register. Individual programs differ on
  1672. details -- some request registration while others require it, some
  1673. specify a maximum trial period. With registration, you get
  1674. anything from the simple right to continue using the software to
  1675. an updated program with printed manual. 
  1676.  
  1677. Copyright laws apply to both Shareware and commercial software,
  1678. and the copyright holder retains all rights, with a few specific
  1679. exceptions as stated below. Shareware authors are accomplished
  1680. programmers, just like commercial authors, and the programs are of
  1681. comparable quality. (In both cases, there are good programs and
  1682. bad ones!) The main difference is in the method of distribution.
  1683. The author specifically grants the right to copy and distribute
  1684. the software, either to all and sundry or to a specific group. For
  1685. example, some authors require written permission before a
  1686. commercial disk vendor may copy their Shareware.
  1687.  
  1688. Shareware is a distribution method, not a type of software. You
  1689. should find software that suits your needs and pocketbook, whether
  1690. it's commercial or Shareware. The Shareware system makes fitting
  1691. your needs easier, because you can try before you buy. And because
  1692. the overhead is low, prices are low also. Shareware has the
  1693. ultimate money-back guarantee -- if you don't use the product, you
  1694. don't pay for it.
  1695.  
  1696. Disclaimer - Agreement
  1697.  
  1698. Users of EVOLVE! must accept this disclaimer of warranty: "EVOLVE!
  1699. is supplied as is.  The author disclaims all warranties, expressed
  1700. or implied, including, without limitation, the warranties of
  1701. merchantability and of fitness for any purpose.
  1702.  
  1703. The author assumes no liability for damages, direct or 
  1704. consequential, which may result from the use of EVOLVE!. EVOLVE!
  1705. is a "shareware program" and is provided at no charge to the user
  1706. for evaluation.  Feel free to share it with your friends, but
  1707. please do not give it away altered or as part of another system. 
  1708. The essence of "user-supported" software is to provide personal
  1709. computer users with quality software without high prices, and yet
  1710. to provide incentive for programmers to continue to develop new
  1711. products.  If you find this program useful and find that you are
  1712. using EVOLVE! and continue to use EVOLVE! after a reasonable trial
  1713. period, you must make a registration payment of $29.00 plus $5.00
  1714. shipping and handling to Software Smiths.  The $29.00 registration
  1715. fee will license one copy for use on any one computer at any one
  1716. time.  If you find value in EVOLVE! but can not afford the $29.00,
  1717. you may obtain a low priority registration by sending me a letter
  1718. telling me that you can not afford to pay the $29.00 fee now, but
  1719. that you intend to pay it in the future when you can afford it. 
  1720. You must treat this software just like a book.  An example is that
  1721. this software may be used by any number of people and may be
  1722. freely moved from one computer location to another, so long as
  1723. there is no possibility of it being used at one location while
  1724. it's being used at another.  Just as a book cannot be read by two
  1725. different persons at the same time.  The $5.00 shipping and
  1726. handling will pay for material Software Smiths will mail to you
  1727. upon registration.
  1728.  
  1729. Commercial users of EVOLVE! must register and pay for their copies
  1730. of EVOLVE! within 30 days of first use or their license is
  1731. withdrawn.  Site-License arrangements may be made by contacting
  1732. Software Smiths.
  1733.  
  1734. Anyone distributing EVOLVE! for any kind of remuneration must
  1735. first contact Software Smiths at the address at the beginning of
  1736. this appendix for authorization.  This authorization will be
  1737. automatically granted to distributors recognized by the (ASP) as
  1738. adhering to its guidelines for shareware distributors, and such
  1739. distributors may begin offering EVOLVE! immediately (However
  1740. Software Smiths must still be advised so that the distributor can
  1741. be kept up-to-date with the latest version of EVOLVE!.).
  1742.  
  1743. You are encouraged to pass a copy of EVOLVE! along to your friends
  1744. for evaluation.  Please encourage them to register their copy if
  1745. they find that they can use it.  All registered users will receive
  1746. a copy of the latest version of the EVOLVE! system.
  1747.  
  1748. Benefits of registering
  1749.  
  1750. Software Smiths will provide the following 
  1751.  
  1752.      1. If you register as a user and pay $5.00 shipping and
  1753.      handling, Software Smiths will send you the next version of
  1754.      EVOLVE!.  Your registration will apply to this version mailed
  1755.      directly to you.
  1756.  
  1757.      2. The registered version of the software will not have a
  1758.      registration notice at the start up.
  1759.  
  1760.      3. Software Smiths will send you a printed user's guide.
  1761.  
  1762.      4. Software Smiths will notify you of any significant bugs
  1763.      found.
  1764.  
  1765.      5. Software Smiths will extend to you the first opportunity
  1766.      to purchase related programs.  We currently plan to develop
  1767.      versions for OS/2 and Microsoft Windows.
  1768.  
  1769.      6. Software Smiths will incorporate your ideas and feedback
  1770.      into the continued development of their products.
  1771.  
  1772.      7. You may call or write to Software Smiths about any problem
  1773.      you have with EVOLVE! and we will do our best to remedy the
  1774.      situation.
  1775.  
  1776. How To Register
  1777.  
  1778. To register, use a text editor to fill out the form in the file
  1779. "REGISTER.DOC".  This form is shown on the next page:
  1780.  
  1781.                         Registration Form
  1782. Mail to:  Richard H. Smith
  1783.           Software Smiths
  1784.           7040 Wick Lane
  1785.           Derwood, MD 20855-1963
  1786.  
  1787. Name:
  1788. Address:
  1789. City:               State:         Zip code:
  1790.  
  1791. Product Name:                       Version:          Release:
  1792. What is your occupation?
  1793.  
  1794. What do you use this software for?
  1795.  
  1796. What do you like most about our software?
  1797.  
  1798. What do you like least about our software?
  1799.  
  1800. What do you like most about our documentation?
  1801.  
  1802. What do you like least about our documentation?
  1803.  
  1804. What is the hardware configuration off your computer?
  1805.      CPU: [] 8088   [] 80286       [] 80386       [] 80486
  1806.      Size Hard Disk:               Type of Modem:
  1807.      3 1/2" Disk Drive []          5 1/4" Disk Drive []
  1808.  
  1809. What type of software do you use?
  1810.      Operating System:
  1811.      Graphical user interface:
  1812.      Programming Languages:
  1813.  
  1814. Where did you get our software from?
  1815.  
  1816. Check one:
  1817.      [] I have enclosed a check that includes the $29.00
  1818.         registration fee.
  1819.      [] I can not afford the $29.00 now, but I will pay it when I  
  1820.       can.
  1821. Check one:
  1822.      [] I have enclosed a check that includes the $5.00 shipping
  1823.         and handling fee.
  1824.      [] I do not want Software Smiths to mail me anything.
  1825.  
  1826. ASP Ombudsman Statement
  1827.  
  1828. This program is produced by a member of the Association of
  1829. Shareware Professionals (ASP).  ASP wants to make sure that the
  1830. shareware principle works for you. If you are unable to resolve a
  1831. shareware-related problem with an ASP member by contacting the
  1832. member directly, ASP may be able to help. The ASP Ombudsman can
  1833. help you resolve a dispute or problem with an ASP member, but does
  1834. not provide technical support for members' products.  Please write
  1835. to the ASP Ombudsman at 545 Grover Road, Muskegon, MI 49442 or
  1836. send a CompuServe message via CompuServe Mail to ASP Ombudsman
  1837. 70007,3536.
  1838. About the Author
  1839.  
  1840. Richard H. Smith, 7040 Wick Lane, Derwood, MD 20855 
  1841. (301) 977-4166
  1842.  
  1843. Objective: An opportunity to perform systems analysis, software
  1844. engineering and training.
  1845.  
  1846. Operating Systems: MS-DOS, UNIX, VMS.
  1847.  
  1848. Languages: Pascal, Prolog, Oracle, SQL-Plus, SLAM-II
  1849.  
  1850. Applications: Wordperfect, Lotus 123, Lotus Freelance, Corel
  1851. Draw.
  1852.  
  1853. Hardware: IBM-PC, Unisys, Vax.
  1854.  
  1855. Professional Experience:
  1856.  
  1857. February 1991 - Present: Self Employed.  Developed "EVOLVE!" a
  1858. structure editor that empowers programmers to implement source
  1859. code changes more efficiently than a text editor.  This structure
  1860. editor can produce source code in any language.  
  1861.  
  1862. June 1988-February 1991: Research Analyst and Software Engineer,
  1863. Analytic Services Inc.  Systems Analyst, software engineer, and
  1864. instructor for the following products:
  1865.  
  1866.      Integrated SCOPE-MARGI (ISM).  Used structured analysis and
  1867.      structured design to integrate two decision support systems
  1868.      (SCOPE & MARGI).  Designed and developed a new capability for
  1869.      ISM that uses an event driven, object oriented user
  1870.      interface.
  1871.  
  1872.      Material Handling Equipment Decision Support System
  1873.      (MHE-DSS).  Used structured analysis and structured design to
  1874.      develop this program for calculating the performance of MHE,
  1875.      and the Air Forces requirements for MHE.  I coded the MHE-DSS
  1876.      in Pascal.  The knowledgebase in the MHE-DSS was derived from
  1877.      a simulation I coded in SLAM-II.
  1878.  
  1879.      Joint Service Research, Development and Acquisition Plan  
  1880.      management information system.  I coded this in Oracle and
  1881.      SQL-Plus on a Unisys 5000.
  1882.  
  1883.      Method for analyzing Reliability Goals and Investments
  1884.      (MARGI), a decision support system for calculating the
  1885.      benefits in combat capability from aircraft reliability
  1886.      improvements.  Used structured analysis and structured design
  1887.      to develop.  Written in Turbo Pascal and Turbo Prolog.
  1888.  
  1889. October 1984-June 1988 Acquisition Program Manager, United States
  1890. Air Force Tactical Reconnaissance System Program Office.  Managed
  1891. the development and acquisition of tactical reconnaissance
  1892. systems.
  1893.  
  1894. Education: B.S. Engineering Physics, 1984, University of Colorado
  1895. at Boulder.
  1896.  
  1897.